BiasAdd

将偏置向量 input_bias 沿通道维广播,加到输入张量 input_x 上。

\[\mathrm{output} = \mathrm{input\_x} + \mathrm{input\_bias}\]
  • NCHW:\(\mathrm{output}(n,c,h,w) = \mathrm{input\_x}(n,c,h,w) + \mathrm{input\_bias}(c)\)

  • NHWC:\(\mathrm{output}(n,h,w,c) = \mathrm{input\_x}(n,h,w,c) + \mathrm{input\_bias}(c)\)

输入:
  • input_x - 输入张量地址

  • input_bias - 偏置地址,长度等于通道数 C;c64 时为交错复数,长度 2C 个 float

  • dims - 维度数组;NCHW 为 [N, C, H, W],NHWC 为 [N, H, W, C]

  • shape_size - 维数(测试常用 4)

  • data_format - 布局:0 为 NCHW,1 为 NHWC(整型,不是字符串)

  • length - input_x 元素个数(复数时为复数个数)

  • core_mask - 核掩码(仅共享存储版本)

输出:
  • output - 输出地址,形状与 input_x 相同

支持平台:

FT78NE MT7004

备注

  • FT78NE 支持 int8、int16、int32、fp32、fp64、cplx64、cplx128

  • MT7004 支持 int16、int32、fp16、fp32、cplx64

  • data_format 为 int:0 = NCHW,非 0(测试用 1)= NHWC

共享存储版本:

void i8_bias_add_s(int8_t *input_x, int8_t *input_bias, int8_t *output, int *dims, int shape_size, int data_format, int length, int core_mask)
void i16_bias_add_s(int16_t *input_x, int16_t *input_bias, int16_t *output, int *dims, int shape_size, int data_format, int length, int core_mask)
void i32_bias_add_s(int32_t *input_x, int32_t *input_bias, int32_t *output, int *dims, int shape_size, int data_format, int length, int core_mask)
void hp_bias_add_s(float16 *input_x, float16 *input_bias, float16 *output, int *dims, int shape_size, int data_format, int length, int core_mask)
void fp_bias_add_s(float *input_x, float *input_bias, float *output, int *dims, int shape_size, int data_format, int length, int core_mask)
void dp_bias_add_s(double *input_x, double *input_bias, double *output, int *dims, int shape_size, int data_format, int length, int core_mask)
void c64_bias_add_s(float *input_x, float *input_bias, float *output, int *dims, int shape_size, int data_format, int length, int core_mask)
void c128_bias_add_s(double *input_x, double *input_bias, double *output, int *dims, int shape_size, int data_format, int length, int core_mask)

C调用示例:

 1// MT7004 示例(共享存储多核,DDR 地址,NHWC)
 2void TestBiasAddSMCFp32(int core_mask) {
 3    int core_id = get_core_id();
 4    int logic_core_id = GetLogicCoreId(core_mask, core_id);
 5    int core_num = GetCoreNum(core_mask);
 6    float *input_x = (float *)0x81000000;
 7    float *input_bias = (float *)0x82000000;
 8    float *output = (float *)0x83000000;
 9    int *dims = (int *)0x85000000;
10    if (logic_core_id == 0) {
11        dims[0] = 1; dims[1] = 4; dims[2] = 4; dims[3] = 16; /* N,H,W,C */
12    }
13    sys_bar(0, core_num);
14    fp_bias_add_s(input_x, input_bias, output, dims, 4, 1 /* NHWC */, 256, core_mask);
15}
16
17void main() {
18    int core_mask = 0b1111;
19    TestBiasAddSMCFp32(core_mask);
20}

私有存储版本:

void i8_bias_add_p(int8_t *input_x, int8_t *input_bias, int8_t *output, int *dims, int shape_size, int data_format, int length)
void i16_bias_add_p(int16_t *input_x, int16_t *input_bias, int16_t *output, int *dims, int shape_size, int data_format, int length)
void i32_bias_add_p(int32_t *input_x, int32_t *input_bias, int32_t *output, int *dims, int shape_size, int data_format, int length)
void hp_bias_add_p(float16 *input_x, float16 *input_bias, float16 *output, int *dims, int shape_size, int data_format, int length)
void fp_bias_add_p(float *input_x, float *input_bias, float *output, int *dims, int shape_size, int data_format, int length)
void dp_bias_add_p(double *input_x, double *input_bias, double *output, int *dims, int shape_size, int data_format, int length)
void c64_bias_add_p(float *input_x, float *input_bias, float *output, int *dims, int shape_size, int data_format, int length)
void c128_bias_add_p(double *input_x, double *input_bias, double *output, int *dims, int shape_size, int data_format, int length)

C调用示例:

 1// MT7004 示例(私有存储单核,AM 地址,NHWC)
 2void TestBiasAddAMFp32(void) {
 3    float *input_x = (float *)0x10010000;
 4    float *input_bias = (float *)0x10020000;
 5    float *output = (float *)0x10030000;
 6    int *dims = (int *)0x10050000;
 7    dims[0] = 1; dims[1] = 4; dims[2] = 4; dims[3] = 16; /* N,H,W,C */
 8    fp_bias_add_p(input_x, input_bias, output, dims, 4, 1 /* NHWC */, 256);
 9}
10
11void main() {
12    TestBiasAddAMFp32();
13}